package com.ip.user.util;

import com.ip.common.constant.PageResult;
import com.ip.common.enums.CodeEnum;

import java.util.List;
import java.util.Collections;

/**
 * 分页工具类
 */
public class PageUtil {
    
    /**
     * 对列表数据进行分页处理
     * 
     * @param data 数据列表
     * @param pageNo 页码（从1开始）
     * @param pageSize 每页大小
     * @param <T> 数据类型
     * @return 分页结果
     */
    public static <T> PageResult<List<T>> paginate(List<T> data, int pageNo, int pageSize) {
        // 创建分页结果对象
        PageResult<List<T>> result = new PageResult<>();
        result.setCode(CodeEnum.SUCCESS.getCode());
        result.setMsg(CodeEnum.SUCCESS.getMsg());
        
        if (data == null || data.isEmpty()) {
            result.setData(Collections.emptyList());
            result.setTotal(0);
            result.setPageNo(pageNo);
            result.setPageSize(pageSize);
            result.setTotalPages(0);
            return result;
        }
        
        // 计算总数和总页数
        int totalCount = data.size();
        int totalPages = (int) Math.ceil((double) totalCount / pageSize);
        
        // 计算起始和结束索引
        int fromIndex = (pageNo - 1) * pageSize;
        int toIndex = Math.min(fromIndex + pageSize, totalCount);
        
        // 如果起始索引超出范围，则返回空列表
        List<T> pageData = (fromIndex < totalCount) ? 
                data.subList(fromIndex, toIndex) : 
                Collections.emptyList();
        
        // 设置结果
        result.setData(pageData);
        result.setTotal(totalCount);
        result.setPageNo(pageNo);
        result.setPageSize(pageSize);
        result.setTotalPages(totalPages);
        
        return result;
    }
}